#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define pi 3.14

//1、编写一个函数，输入月份号，输出该月的英文
//
//void monthEnglish(int month){
//    switch(month){
//        case 1:
//            printf("January \n");
//            break;
//        case 2:
//            printf("February\n");
//            break;
//        case 3:
//            printf("Marcy\n");
//            break;
//        case 4:
//            printf("April\n");
//            break;
//        case 5:
//            printf("May\n");
//            break;
//        case 6:
//            printf("June\n");
//            break;
//        case 7:
//            printf("July\n");
//            break;
//        case 8:
//            printf("August\n");
//            break;
//        case 9:
//            printf("September\n");
//            break;
//        case 10:
//            printf("October\n");
//            break;
//        case 11:
//            printf("November\n");
//            break;
//        case 12:
//            printf("December\n");
//            break;
//        default:
//            printf("error\n");
//            break;
//    }
//////一月 January 二月 February 三月 Marcy 四月 April 五月 May
////// 六月 June 七月 July 八月 August 九月 September 十月 October 十一月 November 十二月 December
//}
//int main() {
//    int month;
//    int result;
//    printf("shu ru month\n");
//    scanf("%d",&month);
//    if( month>13 || month<0){
//        printf("chong xin shu ru\n");
//        scanf("%d",&month);
//    }
//   monthEnglish(month);
//    return 0;
//}

//2、编写程序，输入半径r的值。求对应半径的圆周长 面积 表面积 体积
//球的表面积4 *pi *r*r,球的面积 4/3 *pi *r*r*r

//int  main(){
//    int r;
//    float yuanzhou,yuanmian,yuanti,yuanbiao;
//    printf("shu ru r\n");
//    scanf("%d",&r);
//    yuanzhou=2*r*pi;
//    yuanmian=r*r*pi;
//    yuanti=4.0/3.0*pi*r*r*r;
//    yuanbiao=4*pi*r*r;
//    printf("zhouchang %.2f\nmianji %.2f\nbiaomianji %.2f\ntiji %.2f\n",yuanzhou,yuanmian,yuanti,yuanbiao);
//}

//第二种
//#define pi 3.14
//float yuanzhou(int r){
//    return 2*r*pi;
//}
//
//float yuanmian(int r){
//    return r*r*pi;
//}
//
//float yuanbiao(int r){
//    return 4*pi*r;
//}
//
//float yuanti(int r){
//    return 4.0/3.0*pi*r*r*r;
//}
//
//int main(){
//    int r;
//    printf("shu ru r\n");
//    scanf("%d",&r);
//    yuanzhou(r);
//    yuanmian(r);
//    yuanbiao(r);
//    yuanti(r);
//    printf("zhouchang %.2f\nmianji %.2f\nbiaomianji %.2f\ntiji %.2f\n", yuanzhou(r),yuanmian(r),yuanbiao(r),yuanti(r));
//    return 0;
//}

////3、编写函数，实现求sum=a+aa+aaa+aaaa+aa...a的值，其中a是一个数字。函数列表包含a的值与a构成数字的最大位数（计算次数）。
//练习
//void result(int a,int b){
// //  int c=a;
//   int sum=0;
//   int d=0;
//   if(a/10==0){
//       if(a==0){
//           printf("0\n");
//       }
//       else{
//           for(int i=1;i<=b;i++){
//               d=d*10+a;
//               sum=sum+d;
//           }
//       }
//   }
//   printf("sum=%d\n",sum);
//}
//int main(){
//    int num;
//    int n;
//    printf("shu ru num:\n");
//    scanf("%d",&num);
//    printf("shu ru n:\n");
//    scanf("%d",&n);
//    result(num,n);
//    return 0;
//}

//int result(int a,int n){
//    int sum=0;
//    int current=a;
//    for(int i=0;i<n;i++){
//        sum=sum+a;
//        a=a*10+current;
//    }
//    return sum;
//}
//int main(){
//    int a;
//    int n;
//    scanf("%d",&a);
//    scanf("%d",&n);
//    int Sum=result(a,n);
//    printf("%d",Sum);
//    return 0;
//}


//第二种方法
//    int calculateSum(int a,int n){
//    int sum=0;
//    int current=0;
//    for (int i = 0; i < n; i++) {
//        current = current * 10 + a;
//        sum = sum + current;
//    }
//    return sum;
//}

//int main(){
//    int a,n;
//    printf("shu ru a\n");
//    scanf("%d",&a);
//    printf("wei shu n\n");
//    scanf("%d",&n);
//    int Sum=calculateSum(a,n);
//    printf("sum is %d\n",Sum);
//}


//4、一个球从100m高度自由落下，每次落地后反跳回原高度的一半，再落下，再反弹。C语言编程求它在第10次落地时，共经过多少米，第10次反弹多高。
//第n次弹起的高度
//int main(){
//    float high=100.0;
//    float sum;
//    for(int i=1;i<=10;i++){
//        if(i==1){
//            sum=100;
//        }else{
//            sum=sum+(high)*2;
//        }
//        high=high/2.0;
//    }
//    printf("sum=%f\n",sum);
//    printf("high=%f\n",high);
//    return 0;
//}
//第二遍
//int main(){
//    float high=100.0;
//    int n=10;
//    float sum=0;
//    for(int i=1;i<=10;i++){
//        if(i==1){
//            sum=100.0;
//        }else{
//            sum=sum+high*2;
//        }
//        high=high*0.5;
//    }
//    printf("sum=%f\n",sum);
//    printf("high=%f\n",high);
//    return 0;
//}
//void ball(){
//    float high=100.0;
//    float sum=0.0;
//    for(int i=1;i<=10;i++){
//        if(i==1){
//            sum=100;
//        }
//        else{
//            sum=sum+(2*high);
//        }
//        high=high*0.5;
//    }
//    printf("%f\n",sum);
//    printf("%f\n",sum);
//}
//int main(){
//    ball();
//    return;
//}
//float meter(int n){
//    float high;
//    if(n==1){
//        high=100.0;
//    }
//    else
//        high=meter(n-1)/2.0;
//    return high;
//}
////总共经过多少米
//float all(int n){
//    float sum=0;
//    float b;
//    for(int i=1;i<=n;i++){
//        sum=sum+meter(i)*2;
//    }
//    b=sum-100;
//    return b;
//}
//int main(){
//    int n=10;
//    float sum=0;
//    int chang=100;
//   // int sum=0;
//    printf("ten is %f\n",meter(10));
//    printf("all chang %f\n",all(10));
//    return 0;
//}

//5、C语言编程输出100-1000之间所有的“水仙花数”，所谓的“水仙花数”是指一个3位数，其各位数字立方和等于该数本身。
//int main(){
//    int a,b,c;
//    for(int i=100;i<1000;i++){
//        a=i/100;
//        b=i/10%10;
//        c=i%10;
//        if(i==a*a*a+b*b*b+c*c*c){
//            printf("%d ",i);
//        }
//    }
//    return 0;
//}

/*
int main(){
    int first,second,third;
    int sum;
    for(int i=100;i<1000;i++){
        first=i/100;
        second=i/10%10;
        third=i%10;
        sum=first*first*first+second*second*second+third*third*third;
        if(i==sum){
            printf("%d ",i);
        }
    }
    return 0;
}*/

//6、给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3)，检验它们能否构成三角形。
//不用开平方的函数
//int main(){
//    float x1,x2,x3;
//    float y1,y2,y3;
//    float k1,k2;
//    scanf("%f%f%f%f%f%f",&x1,&x2,&x3,&y1,&y2,&y3);
//    if(x1!=x2){
//        k1=(y2-y1)/(x2-x1);
//    }
//    if(x2!=x3){
//        k2=(y3-y2)/(x3-x2);
//    }
//    if(x1==x3 || x2==x3){
//        if(x1==x2 && x2==x3){
//            printf("no");
//        }else{
//            printf("yes");
//        }
//    }
//    else{
//        if(k1==k2){
//            printf("no");
//        }else{
//            printf("yes");
//        }
//    }
//
//   return 0;
//}
//int main(){
//    int a,b,c,d;
//    for(int i=1000;i<10000;i++){
//        a=i/1000;
//        b=i/100%10;
//        c=i/10%10;
//        d=i%10;
//        if(i==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d){
//            printf("%d ",i);
//        }
//    }
//    return 0;
//}

//void meigui(){
//    int a,b,c,d;
//    int sum=0;
//    for(int i=1000;i<10000;i++){
//        a=i/1000;
//        b=(i/100)%10;
//        c=(i/10)%10;
//        d=i%10;
//        sum=a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d;
//        if(i==sum){
//            printf("%d ",i);
//        }
//    }
//}
//int main(){
//    meigui();
//    return 0;
//}


 // 引入数学库用于sqrt函数
// int main(){
//     float x1,y1;
//     float x2,y2;
//     float x3,y3;
//     printf("shu ru zuo biao 1\n");
//     scanf("%f%f",&x1,&y1);
//     printf("shu ru zuo biao 2\n");
//     scanf("%f%f",&x2,&y2);
//     printf("shu ru zuo biao 3\n");
//     scanf("%f%f",&x3,&y3);
//     double a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
//     double b=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
//     double c=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
//     if(a+b>c&&a+c>b&&b+c>a){
//         printf("yes\n");
//     }else{
//         printf("no\n");
//     }
//     return 0;
// }

//int main() {
//    int arr[3][2];
//    printf("shu ru san ge zuo biao(x y):\n");
//    for (int i = 0; i < 3; i++) {
//        scanf("%d %d", &arr[i][0], &arr[i][1]);
//    }
//
//    // 计算各边长度
//    double a = sqrt((arr[1][0] - arr[0][0])*(arr[1][0] - arr[0][0]) + (arr[1][1] - arr[0][1])*(arr[1][1] - arr[0][1]));
//    double b = sqrt((arr[2][0] - arr[1][0])*(arr[2][0] - arr[1][0]) + (arr[2][1] - arr[1][1])*(arr[2][1] - arr[1][1]));
//    double c = sqrt((arr[0][0] - arr[2][0])*(arr[0][0] - arr[2][0]) + (arr[0][1] - arr[2][1])*(arr[0][1] - arr[2][1]));
//
//    // 判断三角不等式
//    if (a + b > c && a + c > b && b + c > a) {
//        printf("ke yi gou cheng\n");
//    } else {
//        printf("bu ke yi gou cheng\n");
//    }
//    return 0;
//}



//编写一个程序，要求用户输入一个字符串(使用一维字符数组)，然后
//1.检测字符串中是否包含数字字符
//2.如果不包含数字，则找出并输出其中的所有元音字符(不区分大小写)
// 3.如果包含数字，则输出相应的提示信息
//示例输出1(含数字)
//请输入一个字符串:Hello123World该字符串包含数字字符!
//示例输出2(不含数字)
//请输入一个字符串:Programming is fun元音字符:o,a,i,i,u
//int main(){
//    char str[100];
//    int frag=0;
//    scanf("%s",str);
//    for(int i=0;str[i]!='\0';i++){
//        if(str[i]>='0'&& str[i]<='9'){
//            frag=1;
//            break;
//        }
//    }
//    if(frag==1){
//        printf("number\n");
//    }else{
//            for(int i=0;str[i]!='\0';i++){
//            if(str[i]== 97 ||str[i]=='A'||str[i]=='e'||str[i]=='E'||str[i]=='i'||str[i]=='I'||str[i]=='o'||str[i]=='O'||str[i]=='u'||str[i]=='U'){
//                printf("%c\n",str[i]);
//            }
//        }
//    }
//return 0;
//}
//另几种方法，用于当字符串中有空格或者换行是，保证程序正常运行；
//int main(){
//    char str[100];
//    int frag=0;
//    char a;
//    int i=0;
//
//    a=getchar();
//    while(a!='\n'){
//        str[i]=a;
//        i++;
//        a=getchar();
//    }
////    fgets(str, 100, stdin);
// //   fgets(str, sizeof(str), stdin);  // 最多读取 99 个字符 + '\0'
// //   scanf("%[^\n]", str);
// //%99[^\n]采集输入的99个字符，直到采集\n的位置
// //   scanf("%99[^\n]", str);
//
//    for(int i=0;str[i]!='\0';i++){
//        if(str[i]>='0'&& str[i]<='9'){
//            frag=1;
//            break;
//        }
//    }
//    if(frag==1){
//        printf("number\n");
//    }else{
//        for(int i=0;str[i]!='\0';i++){
//            if(str[i]== 97 ||str[i]=='A'||str[i]=='e'||str[i]=='E'||str[i]=='i'||str[i]=='I'||str[i]=='o'||str[i]=='O'||str[i]=='u'||str[i]=='U'){
//                printf("%c\n",str[i]);
//            }
//        }
//    }
//    return 0;
//}



        //查找字符
//int main(){
//    int str[];
//    scanf("%d",&str[]);
//        char target = 'o';
//        // 查找字符 'o'
//        const char *pos = strchr(str, target);
//        if (pos != NULL) {
//            printf("Character 'o' found at position: %ld\n", pos - str); // 计算偏移量
//        } else {
//            printf("Character 'o' not found in the string\n", target);
//        }
//
//}


//#define MAX_STR_LEN 100
//
//int main() {
//    char inputStr[MAX_STR_LEN];
//    int hasDigit = 0;
//    char vowels[MAX_STR_LEN];
//    int vowelCount = 0;
//    scanf("%s", &inputStr);
//
//    for (int i = 0; inputStr[i] != '\0'; i++) {
//        if (isdigit(inputStr[i])) {
//            hasDigit = 1;
//            break;
//        }
//    }
////包含数字输出
//    if (hasDigit==1) {
//        printf("bao han shu zi!\n");
//    } else {
//        // 收集元音字符（不区分大小写）
//        for (int i = 0; inputStr[i] != '\0'; i++) {
//            char lowerChar = tolower(inputStr[i]);
//            if (lowerChar == 'a' || lowerChar == 'e' ||
//                lowerChar == 'i' || lowerChar == 'o' ||
//                lowerChar == 'u') {
//                vowels[vowelCount++] = inputStr[i];
//            }
//        }
//        // 输出元音字符
//        if (vowelCount > 0) {
//            printf("yuan yin:");
//            for (int j = 0; j < vowelCount; j++) {
//                if (j != 0) {
//                    printf(",");
//                }
//                printf("%c", vowels[j]);
//            }
//            printf("\n");
//        }
//    }
//    return 0;
//}
//fgets 或 scanf("%[^\n]")


//int main(){
//    int num=100;
//    int *p=&num;
//
//    printf("%d\n",*p);//num的值
//    printf("%x\n",&p);//p自身地址
//    printf("%x\n",&num);//num自身的地址
//    printf("%x\n",p);//p中存放的地址
//  //  num=*p+100;
//    *p=200;
//    printf("%d\n",num);//修改后num的值
//    printf("%d\n",*p);
//
//    printf("%x\n",&*p);
//    printf("%x\n",*&p);
//    printf("%d\n",*&num);
//
//    return 0;
//}
//第2题:指针指向不同的变量编写程序，声明两个整型变量a=5和b=8，然后:
//定义一个指针变量p，先让它指向a
//输出p指向的值(应该是5)
//让指针p改为指向b
//输出p指向的值(应该是8)
//int main(){
//    int a=5;
//    int b=8;
//    int *p=&a;
//    printf("%d\n",*p);
//    *p=b;
//    //p=&b;
//    printf("%d\n",*p);
//    return 0;
//}

//第二种  输入两个整数，按由大到小输出，结果间接输出
//int main() {
//    int a, b;
//    scanf("%d %d", &a, &b);  // 输入两个整数
//    int *p1 = &a;
//    int *p2 = &b;
//
//    if (*p1 < *p2) {
//        int *temp = p1;
//        p1 = p2;
//        p2 = temp;
//    }
//
//    printf("%d %d\n", *p1, *p2);
//
//    return 0;
//}

//输入两个整数，按由大到小输出，结果间接输出
//int main(){
//    int *p1,*p2,*p3;
//    int a,b;
//    scanf("%d%d",&a,&b);
//    p1=&a;
//    p2=&b;
//    if(a==b){
//        printf("xiang deng\n");
//    }
//    else if(a>b){
//        printf("%d %d",*p1,*p2);
//    }
//    else{
//        p3=&b;
//        p2=&a;
//        p1=p3;
//        printf("%d %d",*p1,*p2);
//    }
//    return 0;
//}


//int main(){
//    int a;
//    int b;
//    scanf("%d%d",&a,&b);
//    int *p=&a;
//    int *g=&b;
//    if(*p>*g){
//        printf("%d %d",*p,*g);
//    }else{
//        printf("%d %d",*g,*p);
//    }
//    return 0;
//}




//数组首地址传值，用指针的形式输出
//void fun(int *p){
//    for(int i=0;i<7;i++){
//       // p=&i;
//        *(p+i)=i+1;
//      //  printf("%d\n",*p);
//        printf("%d\n",*(p+i));
//    }
//}
//
//int main(){
//    int a[7];
//    fun(&a);
//    return 0;
//}

//单个数组元素进行传值
//void fun3(int *p,int n){
//    *p=n+1;
//}
//int main(){
//    int a[7];
//    int *p;
//    for(int i=0;i<7;i++){
//        p=&a[i];
//        fun3(p,i);
//        printf("%d ",a[i]);
//    }
//    return 0;
//}
//第3题:通过指针修改变量编写程序，声明两个整型变量x=10和y=20，然后:
//定义两个指针变量p1和p2
//让p1指向x，p2指向y
//通过p1把x的值改为30
//通过p2把y的值改为40
//输出x和y的新值
//int main(){
//    int x=10;
//    int y=20;
//    int *p1,*p2;
//    p1 = &x;
//    p2 = &y;
//    *p1 = 30;
//    *p2 = 40;
//    printf("%d %d",x,y);
//    return 0;
//}

//第4题:指针与数组基础编写程序，声明一个整型数组arr[3]={10,20,30}，然后:
//定义一个指针变量p,让指针p指向数组的第一个元素
//用指针输出第一个元素的值,让指针p指向数组的第二个元素用指针输出第二个元素的值
//int main(){
//    int arr[3]={10,20,30};
//    int *p;
//    p=arr;
//    printf("%d\n",*p);
//    p=arr+1;
//    printf("%d\n",*p);
//    return 0;
//}
//定义一个整形数组a,长度为7，输入数值自定。通过指针变量找出数组元素的最大值和最小值
//int main(){
//    int a[7];
//    int *p=a;
//    for(int i=0;i<7;i++){
//        scanf("%d",p++);
//    }
//    p=a;
//    int max=*p;
//    int min=*p;
//    for(int i=0;i<7;i++){
//        if(*(p+i)>max){
//            max=*(p+i);
//        }
//        if(*(p+i)<min){
//            min=*(p+i);
//        }
//    }
//    printf("max=%d\nmin=%d\n",max,min);
//    return 0;
//}
//int main(){
//    int a[7];
//    int *p=a;
//    for(p=a;p<a+7;p++){
//        scanf("%d",p);
//    }
//    p=a;
//    int max=*p;
//    int min=*p;
//    for(int i=0;i<7;i++){
//        if(*(p+i)>max){
//            max=*(p+i);
//        }
//        if(*(p+i)<min){
//            min=*(p+i);
//        }
//        printf("%d ",a[i]);
//    }
//    printf("max=%d\nmin=%d\n",max,min);
//    return 0;
//}
//第5题:指针的简单移动编写程序，声明一个整型数组nums[5]={2,4,6,8,10}，然后
//        定义指针p并让它指向数组开头
//输出p当前指向的值
//        让p指向下一个元素，输出这个值
//        让p指向再下一个元素，输出这个值
//        让p指回第一个元素，输出确认
int main(){
    int nums[5]={2,4,6,8,10};
    int *p;
    p=nums;
    printf("%d\n",*p);
    p++;
    printf("%d\n",*p);
    p++;
    printf("%d\n",*p);
    p=nums;
    printf("%d\n",*p);
    return 0;

}